#ifndef __BGOD_VECTOR_H__
#define __BGOD_VECTOR_H__

#include "bgod.h"
#include "point.h"

using BGOD::Point;
using BGOD::Vector;

class Vector : public Point
{

	public:
		Vector(): Point() { }
		Vector(float newX, float newY, float newZ): Point(newX, newY, newZ) {}
		Vector(const Point& other): Point(other) {}
		Vector(Point origin, Point destiny) { (*this) = Vector(destiny - origin); }
		~Vector() {}

		float getNorm() const;
		float getNormSquared() const;
		Vector normalize() const;
		Vector& normalizeMe();

		Vector crossProduct(const Vector& other);
		float dotProduct(const Vector& other);

		inline Vector operator* (const float& c) const { return Vector(Point(getX() * c, getY() * c, getZ() * c)); }

	private:
};

#endif //__BGOD_VECTOR_H__

